/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：呼叫中心-业务逻辑层-工作台-接口定义
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taiping.cc.platform.openfeign.fallback;

import com.taiping.cc.platform.service.PlatformService;
import com.taipingframework.boot.web.response.result.ApiResult;
import com.taipingframework.boot.web.response.status.ApiStatusEnum;
import com.taipingframework.utility.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.TreeMap;

@Slf4j
public class PlatformServiceFallback implements PlatformService {

    /**
     * 查询工作台数据
     */
    @Override
    public ApiResult<TreeMap<String, String>> queryForActionDataList() throws ServiceException {
        log.error("远程服务降级执行。\r\n\r\tat {}", Thread.currentThread().getStackTrace()[1].toString());
        return ApiResult.<TreeMap<String, String>>build()
                .setStatus(ApiStatusEnum.ERR_B0220)
                .setResult(null);
    }

    /**
     * 分布式全局唯一ID生成
     */
    @Override
    public ApiResult<ArrayList<String>> unidList() throws ServiceException {
        log.error("远程服务降级执行。\r\n\r\tat {}", Thread.currentThread().getStackTrace()[1].toString());
        return ApiResult.<ArrayList<String>>build()
                .setStatus(ApiStatusEnum.ERR_B0220)
                .setResult(null);
    }

    /**
     * 分布式锁解决方案 - redis
     */
    @Override
    public ApiResult<Boolean> redisLock() throws ServiceException {
        log.error("远程服务降级执行。\r\n\r\tat {}", Thread.currentThread().getStackTrace()[1].toString());
        return ApiResult.<Boolean>build()
                .setStatus(ApiStatusEnum.ERR_B0220)
                .setResult(null);
    }

    /**
     * 分布式锁解决方案 - zookeeper
     */
    @Override
    public ApiResult<Boolean> zkLock() throws ServiceException {
        log.error("远程服务降级执行。\r\n\r\tat {}", Thread.currentThread().getStackTrace()[1].toString());
        return ApiResult.<Boolean>build()
                .setStatus(ApiStatusEnum.ERR_B0220)
                .setResult(null);
    }

    /**
     * minio文件上传服务
     */
    @Override
    public ApiResult<HashMap<String, String>> uploadAttachment(MultipartFile file) throws ServiceException {
        log.error("远程服务降级执行。\r\n\r\tat {}", Thread.currentThread().getStackTrace()[1].toString());
        return ApiResult.<HashMap<String, String>>build()
                .setStatus(ApiStatusEnum.ERR_B0220)
                .setResult(null);
    }

    /**
     * minio文件下载服务
     */
    @Override
    public ResponseEntity<Resource> downloadAttachment(String objectName) throws ServiceException {
        log.error("远程服务降级执行。\r\n\r\tat {}", Thread.currentThread().getStackTrace()[1].toString());
        // 返回响应实体
        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .body(null);
    }

}
